package com.brillilab.service.core.kit;

import java.util.List;
import java.util.Map;

import com.brillilab.domain.enums.kit.KitEnum;
import com.brillilab.domain.po.kit.ReagentType;
import com.brillilab.domain.vo.inventory.ReagentTypeInventoryCount;
import com.brillilab.domain.vo.kit.ReagentTypeVo;

/**
 * 成分类型Service
 *
 * @author lj
 */
public interface IReagentTypeService {


    ReagentType insert(ReagentType entity);

    boolean deleteById(Long id);

    boolean updateById(ReagentType entity);

    ReagentType selectById(Long id);

    /**
     * 获取试剂类型列表（分组）
     *
     * @param classify
     * @param labId
     * @return
     */
    List<ReagentTypeVo> getTypeList(Integer classify, Long labId, Long labMemberId);

    /**
     * 获取试剂列表（不分组）
     *
     * @param labId
     * @return
     */
    List<ReagentTypeVo> getTypeList(Long labId, Long labMemberId);

    /**
     * @return java.util.List<com.brillilab.domain.vo.inventory.ReagentTypeInventoryCount>
     * @Description: TODO
     * @Params: [rootTypeId]
     * @author wuzhiyu
     * @date 2018/11/20 16:37
     */
    List<ReagentTypeInventoryCount> getTypeInventoryCount(Long labId, Long rootTypeId);

    /**
     * 是否隐藏试剂类型
     *
     * @param labId
     * @param reagentTypeId
     * @param isHide
     * @param labMemberId
     * @return
     */
    boolean isHideType(Long labId, Long reagentTypeId, Integer isHide, Long labMemberId);

    /**
     * 查询全部子分类列表
     *
     * @param classify 分类：1-试剂，2-样品
     * @param labId
     * @return
     */
    List<ReagentTypeVo> selectAllSuReagentType(Long labId, Integer classify, Long labMemberId,Boolean isDelete);

    /**
     * 根据试剂类型Id查找一级试剂类型Id
     *
     * @param reagentTypeIds
     * @return
     */
    Map<Long, Long> selectFirstReagentTypeMap(List<Long> reagentTypeIds);
    
    /**
     * 根据试剂Ids查找一级试剂类型Id
     *
     * @param reagentIds
     * @return
     */
    Map<Long, Long> getFirstReagentTypeMapByReagentIds(List<Long> reagentIds);

    /**
     * @return java.util.List<com.brillilab.domain.po.kit.ReagentType>
     * @Description: TODO
     * @Params: [labId, type]
     * @author wuzhiyu
     * @date 2019/5/28 14:17
     */
    List<ReagentType> getPublicReagentTypeList();

    /**
     * @author WuMenghao
     * @description 成员试剂类型列表
     * @param labId
     * @param labMemberId
     * @return
     */
    List<ReagentType> selectList(Long labId,Long labMemberId);

    List<ReagentType> selectLabReagentTypeList (Long labId);

    List<ReagentType> getSelectedPublicReagentTypeList(List<Long> seletedIdList);

    List<ReagentTypeVo> getTopicReagentTypeList(Long labMemberId, Long labId);
}
